SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[pje_porAnosDeServicioGeneralesYenZona] @idInscripcion as integer,@pje as float output ,@resultado as float output  AS

set nocount on --para anular el trafico econ el cliente (no salen los print)

set dateformat mdy

declare @puntajeZona3 as float,@puntajeZona2 as float,@puntajeZona12 as float,@puntajeZona4 as float,@puntajeZona56 as float, @puntajeSGenerales as float

declare @pjeZona3 as float,@pjeZona2 as float,@pjeZona12 as float,@pjeZona4 as float,@pjeZona56 as float

declare  @idAgente as int,@CargoGenerico as int,@AsignaturaGenerica as int, @idTipoConvocatoria as int ,@fechaLimite as datetime,@nivel_insc as int,@modalidad_insc as int,@ciclo as int

declare @topeSGenerales as  float, @topeZonas as float
declare @v1i as datetime,@v1f as datetime,@v2i as datetime,@v2f as datetime,@fini as datetime,@ffin as datetime,@fFinProyectada as datetime, @fecha_aux as datetime

declare @ASZonas as integer,@ASZona3_auxi as integer,@ASZona4_auxi as integer,@ASZona56_auxi as integer, @anios as integer,@ASZona1 as int,@ASZona2 as int,@ASZona3 as int,@ASZona4 as int,@ASZona5 as int,@ASZona12 as int,@ASZona56 as int,@ASZona6 as int,@ASGeneral as int, @ASGeneral2 as int
declare @nivel_del_cargo as integer --nivel del cargo en que se inscribió

declare @fechaCierreDeInscripciones as datetime,@fecharef as datetime

declare @Fecha_de_Alta_Servicio as datetime,@Fecha_de_Baja_Servicio as datetime,@Nivel as integer,@Modalidad as integer,@Grupo as integer
declare @FechaInicioVacaciones as datetime, @fechafinVacaciones as datetime
declare @cantdias as integer,@cantDiasAcumulados as float, @calculo as float,@Pini as integer,@pfin as integer,@i as integer, @ids as integer,@MaximaCantidadDeAños as int
declare @TieneZona as int
declare @departamento as varchar 	--para determinar si el servicio prestado es de la provincia o no
					-- 1 es de la provincia de La Pampapara , 2 es  de otra provincia .
declare @grupoincumbencia as integer
--declare @grupoIncumbencia2 as int

declare @c1 as int  --para grabar el concepto años de servicio en grupo 1
declare @c2 as int --para grabar el concepto años de servicio en grupo 2
declare @c3 as int --para grabar el concepto años de servicio en grupo 3 y 4
declare @c4 as int --para grabar el concepto años de servicio en grupo 5 y 6 
declare @suma as float

DECLARE @Error INT

BEGIN TRANSACTION
             SET @ERROR=0




select @topeZonas = (select valor1 from tb_parametros where parametro='TopeAñosServiciosZonas') --id 45 leo el  tope por Zonas     Actualmente hay un máximo de 6 años en el grupo que otorgue mayor puntaje     
select @topeSGenerales = (select valor1 from tb_parametros where parametro='TopeAñosServiciosGenerales') -- leo el  tope por Servicios Generales     Actualmente no tiene tope      

--select @FechaInicioVacaciones = (select cast (valor1 as datetime) from tb_parametros where parametro='FechaInicioCicloLect') -- id 1 leo la fecha de inicio del período vacacional
--select @fechafinVacaciones = (select cast (valor1 as datetime) from tb_parametros where parametro='FechaFinCicloLect') -- id 26 leo la fecha de finalización del período vacacional

--set @FechaInicioVacaciones=cast('12/15/2003' as datetime)
--set @fechafinVacaciones=cast('03/01/2004' as datetime)

set @departamento=1

--select @FechaCierreDeInscripciones= (select valor1 from tb_parametros where idparametro=37) la leo abajo
-- ver si en fechaCierreDeInscripcion corresponde poner  fechalimite o fechacierre de la tabla de convocatorias

select  @idAgente=i.Agente,@cargoGenerico = i.CargoGenerico,@AsignaturaGenerica=i.AsignaturaGenerica,@idtipoConvocatoria=Conv.TipoConvocatoria,@FechaLimite=Conv.FechaLimite,@fechaCierreDeInscripciones=Conv.fechaCierre,@FechaInicioVacaciones=FechaInicioVacaciones,@FechaFinVacaciones=FechaFinVacaciones,@nivel_insc = i.nivel,@modalidad_insc=i.modalidad,@ciclo=ciclo
	from 
	tb_inscripcionesConvocatorias i 
		join tb_Convocatorias conv on i.Convocatoria=conv.idConvocatoria 
	where i.idInscripcionConvocatoria=@idInscripcion


delete [SageNET].[dbo].[tb_DetallePuntajes] where agente=@idagente and idconcepto=192 and inscripcion=@idinscripcion


if @nivel_insc = 3 and @ciclo = 2 set  @nivel_insc=4

select @grupoIncumbencia=case
	when @nivel_insc = 2 then 570
	when @nivel_insc = 3 then 570
	when @nivel_insc = 4 then 571
end





--print ' incumbencia'
--print @grupoIncumbencia


--while @departamento <= 2
 --  begin
       SELECT @TieneZona = count(*)  FROM tb_Servicioshistoricos sa  WHERE (sa.zona in(2,3,4,5,6) or sa.localidad in(120))  and sa.IdAgente=@idAgente and sa.FechaPresentacion <= @FechaLimite  --me fijo si tiene servicios con zona o no, en caso afirmativo tengo que calcular los servicios con este procedimiento
														-- pero si no tiene zona el calculo se simplifica bastante y lo calculo	de la misma manera que pje_poranosDeServicioEnLaProvincia
IF @TieneZona > 0
BEGIN --1 --@TieneZona > 0
	-- creo la tabla (temporal) calendario con el campo ids as integer, y le inserto tantos registros -inicializados en 0- como la máxima cantidad de días de servicio que la persona pueda tener
	
--select @MaximaCantidadDeAños = datediff(yyyy,min(fechaAlta),getdate()) + 1 from tb_serviciosHistoricos where idagente=@idagente
	select @MaximaCantidadDeAños =75

--print 'tiene zona'

/*	IF EXISTS(select * from tempdb.dbo.sysobjects where name like '%##calendario%')
	begin
   		  print 'borro la tabla calendario'
		  DROP TABLE ##calendario
	end

	create table tempdb.##calendario (id int identity (0,1) ,ids smallint default 0)

	set @i=0
	while @i < (@MaximaCantidadDeAños + 3)  *365-1
	begin
		insert tempdb.##calendario values (0)
		set @i=@i+1
	end
*/

	IF NOT EXISTS(select top 1 name from tempdb.dbo.sysobjects where name like '%##calendario')
	 begin
--		print 'creo la tabla calendario'
		create table ##calendario (id int identity (0,1) ,ids smallint default 0)
		IF Not EXISTS (SELECT name FROM tempdb.dbo.sysindexes  WHERE name = 'calendario_id_ind')   CREATE INDEX calendario_id_ind  ON ##calendario (id)
		set @i=0
		while @i < (@MaximaCantidadDeAños + 3)  *365-1
		begin
			insert ##calendario values (0)
			set @i=@i+1
		end
	  end	
	 --else drop table ##calendario
	else update ##calendario set ids=0

--print 'terminé con la tabla calendario'

		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir




--            if  @idTipoConvocatoria in (1,2,4,5,9) --  TipoConvocatoria = 1 ingreso,interinatos y suplencias, 2 Ascenso
--	begin	
		--TopeZonas = 6

		--supongo que existe una tabla calendario con un campo calend integer, y que tiene 65*365 filas suponiendo que la persona puede tener 65 años de servicios
--		update ##calendario set ids=0 --inicializo la tabla con ceros
		-- calend(0) corresponde al dia de 1/1/(corriente año - 60) años

		set @FechaRef = cast('01/01/'+ str(datepart(yyyy,getdate() ) - @MaximaCantidadDeAños ) as datetime)

		-- para leer el nivel al cual pertenece el caro en que se inscribió

		select @nivel_Del_Cargo=nivel from tb_cargosGenericos where @cargoGenerico=idcargogenerico
	


		/*SELECT sa.FechaAlta,isnull(sa.FechaBaja,@fechaCierreDeInscripciones),subo.Nivel,subo.Modalidad,subo.Zona FROM 
			tb_ServiciosAgentes sa 
			join tb_subserviciosAgentes subs on sa.idServicioAgente = subs.servicioagente 
			join tb_plazas p on subs.plaza=p.idplaza
			join tb_suborganizaciones  subo on p.suborganizacion=subo.idsuborganizacion
		WHERE sa.Agente=@idAgente 
		ORDER BY sa.FechaAlta*/

/*
 SELECT @suma = SUM (distinct DATEDIFF (dd,sh.FechaAlta,isnull(sh.FechaBaja,@fechaCierreDeInscripciones))) FROM 
				tb_ServiciosHistoricos sh 
				join tb_organizaciones  o on sh.ubicacionoriginal=o.idorganizaciones
				join tb_localidades loc on o.Localidad = loc.IdLocalidad 
				join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=sh.GrupoIncumbencias
		--		join tb_reluniongsgu R on r.idgrupounion = G.idGrupoIncumbencia
				join tb_incumbencias h on G.idGrupoIncumbencia=h.grupoIncumbencia
			WHERE sh.IdAgente=@idAgente  and (loc.Departamento in (1, case @resultado when -9 then 2 else 1 end))
			and (h.grupoIncumbencia=@grupoIncumbencia or h.grupoIncumbencia=99) and sh.FechaPresentacion <= @FechaLimite
print 'suma'
print @suma*1.33
if isnull(@suma*1.33,0) between 120 and 180  set @pje = 0.5 
else begin --2    (SELECT SUM (DATEDIFF (month,sh.FechaAlta,isnull(sh.FechaBaja,@fechaCierreDeInscripciones)))

*/

--print 'antes del cursor'
		DECLARE tetas CURSOR FORWARD_ONLY FOR
		SELECT distinct sh.FechaAlta,isnull(sh.FechaBaja,@fechaCierreDeInscripciones),sh.Nivel,sh.Modalidad,sh.Zona 
		FROM 	tb_Servicioshistoricos sh
			--join tb_organizaciones  o on sh.ubicacionoriginal=o.idorganizaciones
			-- join tb_localidades loc on o.localidad = loc.idlocalidad
			join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=sh.GrupoIncumbencias
			--join tb_reluniongsgu R on r.idgrupounion = G.idGrupoIncumbencia
			join tb_incumbencias h on G.idGrupoIncumbencia=h.grupoIncumbencia
		WHERE sh.IdAgente=@idAgente --and loc.departamento = @departamento
		and (h.grupoIncumbencia=@grupoIncumbencia or h.grupoIncumbencia=99 ) and sh.FechaPresentacion <= @FechaLimite		
		ORDER BY sh.FechaAlta

		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir



		set @pje = 0
		OPEN tetas
		FETCH NEXT FROM tetas INTO @Fecha_de_Alta_Servicio,@Fecha_de_Baja_Servicio,@Nivel,@Modalidad,@Grupo

		WHILE @@fetch_status = 0
		

		BEGIN--3

		--print 'entré al while del cursor'	
			
		            set @fini = @Fecha_de_Alta_Servicio
    
			    -- Fijo las Fechas de Baja abiertas     
	
			set @ffin = isNull(@Fecha_de_Baja_Servicio,@FechaCierreDeInscripciones)  --si la fecha de baja es null le asigno la fecha de cierre de inscripciones
			if @Fecha_de_Baja_Servicio < @Fecha_de_Alta_Servicio or @Fecha_de_Baja_Servicio>@FechaCierreDeInscripciones or @Fecha_de_Baja_Servicio = cast('01/01/2000' as datetime) or @Fecha_de_Baja_Servicio = cast('01/01/1900' as datetime)
				set @ffin= @FechaCierreDeInscripciones
			else 
				set @ffin= @Fecha_de_Baja_Servicio
			--Calculo los períodos vacacionales mas proximos
			set @v1i=@FechaInicioVacaciones
			while @v1i > @fini
			begin
			 set @v1i =dateadd(year,-1,@v1i)--cast(str(datepart(mm,@FechaInicioVacaciones)) + '/'+str(datepart(dd,@FechaInicioVacaciones))+'/'+str(datepart(yyyy,@v1i)-1) as datetime)
			end
			set @v1f = @v1i + (@FechaFinVacaciones - @FechaInicioVacaciones)
			set @v2f = @v1f
			while @v2f<@ffin or @v2f=@v1f 
			begin
				/*If datepart (dd,@v1f) = 29 AND datepart (mm,@v1f) = 2 AND (datepart (yyyy,@V1f) % 4 = 0)  --es decir 29/02 de un año bisiesto
					set @v2f =cast(str(datepart(mm,@v2f)) + '/'+str(datepart(dd,@v2f)-1)+'/'+str(datepart(yyyy,@v2f)+1) as datetime)
				else
					set @v2f =cast(str(datepart(mm,@v2f)) + '/'+str(datepart(dd,@v2f))+'/'+str(datepart(yyyy,@v2f)+1) as datetime)*/
				set @v2f =dateadd(year,1,@v2f)
				
			end
			
			set @v2i = @v2f - (@FechaFinVacaciones - @FechaInicioVacaciones)				

			-- Calculo la proyeccion del servicio	

			--Empieza y Termina en las mismas Vacaciones	

			if (@fini < @v1f  AND @ffin < @v1f)  set @cantdias= datediff(dd,@fini,@ffin)	

			--   Empieza en unas vacaciones y termina en otras
			if @fini < @v1f AND @ffin >= @v2i  and @ffin < @v2f
			begin          --atencion, si fini y ffin tienen el mismo año, topear con 365
			print 'Empieza en unas vacaciones y termina en otras ' 	
            			         If datepart (yyyy,@fini) = datepart(yyyy,@ffin) 
             		             		    set @cantdias = 365
               	    	    	Else
              		          		set @cantdias = datediff(dd,@fini,@v2f)   --datediff(xx,comienzo,fin) = fin - comienzo
			end	

			-- Empieza en Vacaciones y finaliza en periodo lectivo del mismo año
		
			if @fini < @v1f AND @ffin >= @v1f AND @ffin <=dateadd(year,1,@v1i )-- cast(str(datepart(mm,@v1i)) + '/'+str(datepart(dd,@v1i))+'/'+str(datepart(yyyy,@v1i)+1) as datetime)--(@v1i + 365) 
				begin
					print 'Empieza en Vacaciones y finaliza en periodo lectivo del mismo año '
					set @calculo=round(datediff(dd,@v1f,@ffin) * 1.33,0)
					exec @cantdias = sp_minimo 365, @calculo
					set @cantdias = @cantdias+ datediff(dd,@fini,@v1f)
					--set  @cantdias = (@v1f - @fini) +  min( 365, (@ffin - @v1f) * 1.33)
				end	

			--Empieza en Vacaciones y finaliza en periodo lectivo de otro año
		
			--if @fini <= @v1f AND  @ffin >= cast(str(datepart(mm,@v1f)) + '/'+str(datepart(dd,@v1f))+'/'+str(datepart(yyyy,@v1f)+1) as datetime) --and @ffin >= @v2i --está mal esta condición (and @ffin < @v2i), lo arreglé el 08/04/2005
			if @fini <= @v1f AND  @ffin >= dateadd(year,1,@v1f) --cast(str(datepart(mm,@v1f)) + '/'+str(datepart(dd,@v1f))+'/'+str(datepart(yyyy,@v1f)+1) as datetime) 
			begin
				print 'Empieza en Vacaciones y finaliza en periodo lectivo de otro año '
				set @fecha_aux=@v2f
				set @fecha_aux=dateadd(dd,-365,@fecha_aux) -- ojo le resto 365 dias
				set @calculo=round (datediff(dd,@fecha_aux,@ffin)* 1.33,0)
				exec @cantdias = sp_minimo 365,  @calculo
				set @cantdias=@cantdias+datediff(dd,@fini,@fecha_aux)
				--set  @cantdias = min(365, (@ffin - (@v2f - 365)) * 1.33) + ((@v2f - 365) - @fini)
			end

			--Empieza en período Lectivo y finaliza en vacaciones del mismo año

			--PRINT 'ACAAAAAAAAAAAAAAAA... ' + CONVERT(VARCHAR, @v1f)

			--if @fini >= @v1f AND  @ffin >= (@v1i + 365)  AND @ffin <= cast(str(datepart(mm,@v1f)) + '/'+str(datepart(dd,@v1f))+'/'+str(datepart(yyyy,@v1f)+1) as datetime)--@ffin <= (@v1f + 365) 
			if @fini >= @v1f AND  @ffin >= (@v1i + 365)  AND @ffin <=  dateadd(year,1,@v1f) 
			begin
				print 'Empieza en período Lectivo y finaliza en vacaciones del mismo año'
				set @fecha_aux=@v1i
				set @fecha_aux=dateadd(dd,365,@fecha_aux) -- ojo le sumo 365 dias
--				set @calculo = round(datediff(dd,@fini,dateadd(dd,365,@fecha_aux)) * 1.33,0)
				set @calculo = round(datediff(dd,@fini,@fecha_aux) * 1.33,0)
				exec @cantdias = sp_minimo 365,@calculo
				set @calculo=datediff(dd,@fini,@ffin)				exec @cantdias= sp_maximo @cantdias,@calculo
  			  	--set @cantdias = max(min(365, ((@v1i + 365) - @fini) * 1.33), (@ffin - @fini))
			end	


			--Empieza en periodo lectivo y termina en otras vacaciones

			if @fini >= @v1f and @ffin >= @v2i and datediff(yy,@v1i,@v2i) >1--@ffin >= cast(str(datepart(mm,@v1i)) + '/'+str(datepart(dd,@v1i))+'/'+str(datepart(yyyy,@v1i)+1) as datetime) -- @ffin >= dateadd(dd,365,@v1i ) 
			begin
				print 'Empieza en periodo lectivo y termina en otras vacaciones '
				set   @cantdias = datediff(dd,@fini,@v2f)
			end
			--    Empieza y termina en el mismo periodo lectivo
			if @fini >= @v1f and @ffin < dateadd(year,1,@v1i)--cast(str(datepart(mm,@v1i)) + '/'+str(datepart(dd,@v1i))+'/'+str(datepart(yyyy,@v1i)+1) as datetime) --(@v1i + 365)  
			begin
				print 'Empieza y termina en el mismo periodo lectivo '
				set @calculo=round(datediff(dd,@fini,@ffin) * 1.33,0)
				exec @cantdias =  sp_minimo 365, @calculo
			end	
			 --Empieza en periodo lectivo y termina en otro
			if   @fini >= @v1f and @ffin < @v2i and datediff(yy,@v1i,@v2i) >1 --@ffin >= cast(str(datepart(mm,@v1i)) + '/'+str(datepart(dd,@v1i))+'/'+str(datepart(yyyy,@v1i)+1) as datetime)--@ffin >= dateadd(dd,365,@v1i) 
			begin
				print 'Empieza en periodo lectivo y termina en otro '
				set @fecha_aux=@v2f
				set @fecha_aux=dateadd(dd,-365,@fecha_aux) -- ojo le resto 365 dias
				set @calculo=round(datediff( dd,@fecha_aux,@ffin ) * 1.33,0)
				exec @cantdias=  sp_minimo 365,@calculo
				set @cantdias=@cantdias+datediff(dd,@fini,@fecha_aux)
			--		set @cantdias = ((@v2f - 365) - @fini) + min(365, (@ffin - (@v2f - 365)) * 1.33)
			end
		
			-- corro la fecha de baja hasta la de baja del servicio más los días que le corresponde por el proporcional de vacaciones
			-- recordar que cantdias tiene los días de servicio más el proporcional
		
			print 'fecha de alta: '+ cast(@Fecha_de_Alta_Servicio as varchar) + '   fecha de baja: '+ cast(@Fecha_de_baja_Servicio as varchar)
			print 'parámetros de periodos vacacionales'
			print @v1i
			print @v1f
			print @v2i
			print @v2f
		
		
		print 'cantDias' + cast(@CantDias as varchar)
		print' '
		--print'--  fin     -----------------'
	
	

			--Construyo Identificador del Servicio
			--Ojo: supongo que a mayor grupo mayor puntaje @nivel_insc = i.nivel,@modalidad_insc=i.modalidad
			-- seguramente cuando se inscriban en un cargo de EGB del tercer Ciclo no le va a dar zona 

	 		If @nivel_del_cargo <> @nivel --la zona se valora para en el mismo nivel
	            		    set @ids = 1
 	           		   Else
				select @ids=case
				when isnull(@Grupo,1)=1009  then 1
				when isnull(@Grupo,1)=1010  then 2
				when isnull(@Grupo,1)=1011  then 3
				when isnull(@Grupo,1)=1012  then 1
				when isnull(@Grupo,1)=27  then 1
				else   isnull(@Grupo,1)
		
			end
  	          	--	       set @ids = isnull(@Grupo,1) anulado el 24/06/2008 por cambios en la tabla tb_zonas

	 	--	If @nivel_insc <> @nivel --la zona se valora para en el mismo nivel
             		--	    set @ids = 1
             		--	   Else
             		--	       set @ids = isnull(@Grupo,1)

			print 'identificador de servicio'
			print @ids

	           		set @FfinProyectada=@fini
			set @FfinProyectada=dateadd(dd,@cantdias,@FfinProyectada)
			set @pini = datediff(dd,@FechaRef,@fini)
			set @pfin = datediff(dd,@FechaRef,@FfinProyectada )  
			print '@FechaRef' + cast(@FechaRef as varchar)
			print '@FfinProyectada' + cast(@FfinProyectada as varchar)
			print '@fini' + cast(@fini as varchar)

			set @i=cast(@pini as int)
			print 'pini ' +cast(@pini as varchar)
			print 'pfin ' +cast(@pfin as varchar)
	--		while @i <=  @Pfin
	--		begin
	--			update ##calendario set ids = @ids where ##calendario.id between =@i and @ids >##calendario.ids
	--			--If ids > calend(i)  set @calend(i) = @ids
	--			set @i = @i+1	
	--		end

	select @asGeneral= count(*) from ##calendario where ids > 0	
	INSERT INTO [SageNET].[dbo].[tb_DetallePuntajes](inscripcion,[Agente], [idConcepto], [detalle1], [detalle2], [detalle3], [detalle4], [detalle5], [detalle6], [detalle7], [detalle8])
	VALUES(@idinscripcion,@idagente,192,cast(@Fecha_de_Alta_Servicio as varchar),cast(@Fecha_de_baja_Servicio as varchar),cast( @cantDias as varchar), cast(@asGeneral as varchar) ,cast(@departamento as varchar),null,null,null)

	SET @Error = @@ERROR 
	IF @Error <> 0 GOTO Salir



			update ##calendario set ids =@ids where (id between @pini and @pfin -1) and @ids > ids

			FETCH NEXT FROM tetas INTO @Fecha_de_Alta_Servicio,@Fecha_de_Baja_Servicio,@Nivel,@Modalidad,@Grupo

		END --del while del cursor (3)



		CLOSE tetas
		DEALLOCATE tetas
	
--		if @departamento=1 
--		begin
		--Calculo los años en cada zona
		set @ASzona1 = 0
		set @ASzona2 = 0
		set @ASzona12 = 0
		set @ASZona3 = 0		
		set @ASZona4 = 0
		set @ASzona5 = 0
		set @ASzona6 = 0
		set @ASGeneral = 0
		set @ASGeneral2 = 0
		set @PuntajeZona2=0
		set @PuntajeZona3=0
		set @PuntajeZona4=0
		set @PuntajeZona56=0

		set @PjeZona2=0
		set @PjeZona3=0
		set @PjeZona4=0
		set @PjeZona56=0

		SET @i=0


		select @asGeneral= count(*) from ##calendario where ids > 0
		select @ASzona1= count(*) from ##calendario where ids = 1
		select @ASzona2= count(*) from ##calendario where ids = 2
		select @ASzona3= count(*) from ##calendario where ids = 3
		select @ASzona4= count(*) from ##calendario where ids = 4
		select @ASzona5= count(*) from ##calendario where ids = 5
		select @ASzona6= count(*) from ##calendario where ids = 6

print '@asGeneral---------------------------- ' + cast(@ASGeneral as varchar)
print '@asZonz3---------------------------- ' + cast(@ASzona3 as varchar)

--set @ASzona12 = @ASzona1 + @ASzona2
--set @ASzona2 =  @ASzona2 -- le saqué zona 1             03/09/2007

print '@ASzona12 = @ASzona2------------------------------------- ' + cast(@ASzona2 as varchar)
set @ASZona56 = @ASzona5 + @ASzona6

if isnull(@ASzona2,0) between 120 and 180  set @PjeZona2 = 0.06  --agregado 2007 
if isnull(@ASzona3,0) between 120 and 180  set @PjeZona3 = 0.12 --agregado 2007
if isnull(@ASzona4,0) between 120 and 180  set @PjeZona4 = 0.18 --agregado 2007
if isnull(@ASzona56,0) between 120 and 180  set @PjeZona56 = 0.25 --agregado 2007


print 'Puntaje por zonas 2 ------------------------------------------------------------------- ' + cast(@PjeZona2 as varchar)
print 'Puntaje por zonas 3 ------------------------------------------------------------------------- ' + cast(@PjeZona3 as varchar)
print 'Puntaje por zonas 4 ----------------------------------------------------------------------- ' + cast(@PjeZona4 as varchar)
print 'Puntaje por zonas 56 ---------------------------------------------------------------- ' + cast(@PjeZona56 as varchar)


if isnull(@asGeneral,0) between 120 and 180  set @pje = 0.5 
else begin


		If (@ASGeneral % 365) >= 183 
		        set @ASGeneral =  floor(@ASGeneral / 365) + 1	
		        Else
		        set @ASGeneral = floor (@ASGeneral / 365)
		-- analizo los topes de zonas
		print ' (@ASGeneral % 365) '
		print @ASGeneral 

	---	SET @CALCULO=@puntajeSGenerales * 2
	--	EXEC   @puntajeSGenerales = SP_MINIMO @TopeSGenerales, @ASGeneral  --recordar que el tope para los servicios y zona está expresado en años


--		if @ASGeneral > @TopeSGenerales set  @puntajeSGenerales = @TopeSGenerales else set @puntajeSGenerales = @ASGeneral 	 	


		SET @puntajeSGenerales = @ASGeneral * 2 --ahora va sin tope

		set @pje=@puntajeSGenerales
end

	print '@puntaje Servicios Generales'
	print @pje
	--print 'Topezonas : ' 
	--print 'Topezonas : ' + cast (@TopeZonas as varchar)

		If (@ASZona56 % 365) >= 183 
		       set @ASZona56 = floor(@ASZona56 / 365) + 1
		        Else
		        set @ASZona56 =  floor(@ASZona56 / 365)
			--select @ASZona56 = case 
				--when @ASZona56 = 0.25 then 0.25 
				--else floor(@ASZona56 / 365) 
			--end
		If (@ASzona2 % 365) >= 183 
		        set @ASzona2 =  floor(@ASzona2 / 365) + 1
		        Else
		        set @ASzona2 = floor (@ASzona2 / 365)
/*		If (@ASzona1 % 365) > 183 
		        set @ASzona1 =  floor(@ASzona1/ 365) + 1
		        Else
		        set @ASzona1 = floor (@ASzona1/ 365)
		If (@ASzona2 % 365) > 183 
		        set @ASzona2 = floor (@ASzona2 / 365) + 1
		        Else
		        set @ASzona2 = floor (@ASzona2 / 365)*/     --anulado el 26/11/2007
		If (@ASZona3 % 365) >= 183 
		        set @ASZona3 = floor (@ASZona3 / 365) + 1
		        Else
		        set @ASZona3 = floor (@ASZona3 / 365)
		If (@ASZona4 % 365) >= 183
		        set @ASZona4 =  floor(@ASZona4 / 365) + 1
		        Else
		        set @ASZona4 =  floor(@ASZona4 / 365)
		/*If (@ASzona5 % 365) > 183 
		       set  @ASzona5 = floor (@ASzona5 / 365) + 1
		        Else
		        set @ASzona5 =  floor(@ASzona5 /365)
		If (@ASzona6 % 365) > 183
		        set @ASzona6 = floor (@ASzona6 / 365) + 1
		        Else
		        set @ASzona6 =  floor(@ASzona6 / 365)*/

	--	EXEC   @PuntajeZona56 = SP_MINIMO @TopeZonas, @ASZona56 

		if @ASZona56 > @TopeZonas set @PuntajeZona56=@TopeZonas  else  set @PuntajeZona56 =  @ASZona56 
			
		SET @PuntajeZona56 =  @PuntajeZona56 * 1

		-- @PuntajeZona4 = min(max(0, TopeZonas - ASZona56), ASZona4) * .75
		SET @CALCULO = isnull(@TopeZonas - @ASZona56,0)
		--print 'calculo 4 '
		--print @calculo
		if @CALCULO < 0 set  @PuntajeZona4=0 else set  @PuntajeZona4=@CALCULO
		if (@ASZona4 < @puntajeZona4)   set @PuntajeZona4=  @ASZona4
		SET @PuntajeZona4 = @PuntajeZona4 * 0.75
		--PuntajeZona3 = min(max(0, TopeZonas - ASZona56 - ASZona4), ASZona3) * .5
		SET @CALCULO = isnull(@TopeZonas - @ASZona56 - @ASZona4,0)
		--print 'calculo 3 '
		--print @calculo

		if @CALCULO < 0 set  @PuntajeZona3=0 else set  @PuntajeZona3=@CALCULO
		--print @PuntajeZona3
	--	EXEC @PuntajeZona3 = sp_minimo @puntajeZona4, @ASZona3
		if @puntajeZona3 < @ASZona3 set @PuntajeZona3 = @puntajeZona3 else set @PuntajeZona3 = @ASZona3
		SET @PuntajeZona3 = @PuntajeZona3 * 0.5
		--print 'Puntaje zona 3'
		--print @puntajeZona3


		SET @CALCULO = isnull(@TopeZonas - @ASZona56 - @ASZona4 -@ASZona3,0)
		print 'calculo 2 '
		print @calculo

		if @CALCULO < 0 set  @PuntajeZona2=0 else set @PuntajeZona2 =@CALCULO
		if @puntajeZona2 < @ASZona2 set @PuntajeZona2 = @puntajeZona2 else set @PuntajeZona2 =@ASZona2
		SET @PuntajeZona2 =  @PuntajeZona2 * 0.25
		print 'Puntaje grupo  2'
		print @puntajeZona2

SET @CALCULO = isnull(@TopeZonas - @ASZona56 - @ASZona4 -@ASZona3 - @ASZona2 ,0)
print 'calculo final de topes............ ' + cast (@CALCULO as varchar)


if (@puntajeZona2 < @PjeZona2) and @CALCULO>0 set @PuntajeZona2 = @pjeZona2 
if (@puntajeZona3 < @PjeZona3) and @CALCULO>0 set @PuntajeZona3 = @pjeZona3 
if (@puntajeZona4 < @PjeZona4) and @CALCULO>0 set @PuntajeZona4 = @pjeZona4 
if (@puntajeZona56 < @PjeZona56) and @CALCULO>0 set @PuntajeZona56 = @pjeZona56 

--set @PuntajeZona3 =1
--set @PuntajeZona2 =1
--begin transaction

			select @c1=case --Grupo 2
				when @idTipoConvocatoria= 1 then 526
				when @idTipoConvocatoria= 2 then 302
				when @idTipoConvocatoria= 3 then 609
				when @idTipoConvocatoria= 9 then 588
				when @idTipoConvocatoria= 10 then 599
			end
			select @c2=case --Grupo 3
				when @idTipoConvocatoria= 1 then 195
				when @idTipoConvocatoria= 2 then 297
				when @idTipoConvocatoria= 3 then 604
				when @idTipoConvocatoria= 9 then 549
				when @idTipoConvocatoria= 10 then 596
	
			end
			select @c3=case --Grupo 4
				when @idTipoConvocatoria= 1 then 196
				when @idTipoConvocatoria= 2 then 298
				when @idTipoConvocatoria= 3 then 605
				when @idTipoConvocatoria= 9 then 550
				when @idTipoConvocatoria= 10 then 597
			end
			select @c4=case--Grupo 5 y 6
				when @idTipoConvocatoria= 1 then 197
				when @idTipoConvocatoria= 2 then 299
				when @idTipoConvocatoria= 3 then 606
				when @idTipoConvocatoria= 9 then 551
				when @idTipoConvocatoria= 10 then 598
			end
		
			print 'c1,c2,c3,c4'
			print @c1
			print @c2
			print @c3
			print @c4
	 if  @idTipoConvocatoria <> 11 
		begin	
			if exists(select top 1 * from tb_calificacionesdeinscripcion where inscripcion = @idInscripcion and concepto = @c1)-- grupo2 Zona Roja
				update tb_calificacionesdeinscripcion set puntaje=isnull(@PuntajeZona2,0) where inscripcion=@idInscripcion and concepto=@c1
			else 	insert tb_calificacionesdeinscripcion (Inscripcion,Concepto,Puntaje) values (@idInscripcion,@c1,isnull(@PuntajeZona2,0)) 

			if exists(select top 1 * from tb_calificacionesdeinscripcion where inscripcion = @idInscripcion and concepto = @c2)-- grupo 3 Zona Desfavorable
				update tb_calificacionesdeinscripcion set puntaje=isnull(@PuntajeZona3,0) where inscripcion=@idInscripcion and concepto=@c2
			else 	insert tb_calificacionesdeinscripcion (Inscripcion,Concepto,Puntaje) values (@idInscripcion,@c2,isnull(@PuntajeZona3,0)) 

			if exists(select top 1 * from tb_calificacionesdeinscripcion where inscripcion = @idInscripcion and concepto = @c3)-- grupo 4  Zona Muy Desfavorable
				update tb_calificacionesdeinscripcion set puntaje=isnull( @PuntajeZona4,0) where inscripcion=@idInscripcion and concepto=@c3
			else 	insert tb_calificacionesdeinscripcion (Inscripcion,Concepto,Puntaje) values (@idInscripcion,@c3,isnull( @PuntajeZona4,0)) 	

			if exists(select  top 1 * from tb_calificacionesdeinscripcion where inscripcion = @idInscripcion and concepto = @c4)-- grupo 5 y 6 Zona inhóspita
				update tb_calificacionesdeinscripcion set puntaje=isnull(@PuntajeZona56,0) where inscripcion=@idInscripcion and concepto=@c4
			else 	insert tb_calificacionesdeinscripcion (Inscripcion,Concepto,Puntaje) values (@idInscripcion,@c4,isnull(@PuntajeZona56,0)) 		


		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir

	end

--		commit transaction
		
/*

       	end	 --del if @departamento=1
       	Else  --si es servicio de otra provincia
		begin
			select @asGeneral2= count(*) from ##calendario where ids > 0
			If (@ASGeneral2 % 365) > 183 
			        set @ASGeneral2 =  floor(@ASGeneral2 / 365) + 1
			        Else
			        set @ASGeneral2 = floor (@ASGeneral2 / 365)

--			begin transaction
--				if exists(select * from tb_calificacionesdeinscripcion where inscripcion = @idInscripcion and concepto = 1905)-- años de servicio en otra jurisdicción "provincia"
--					update tb_calificacionesdeinscripcion set puntaje=isnull(@ASGeneral2,0) where inscripcion=@idInscripcion and concepto=1905	
--				else 	insert tb_calificacionesdeinscripcion (Inscripcion,Concepto,Puntaje) values (@idInscripcion,1905,isnull(@ASGeneral2,0)) 
--			commit transaction

		end--si es servicio de otra provincia
*/
/*	end -- del if @idTipoConvocatoria = 1 
 	else
		begin
			insert tb_registroeventos (fecha,idusuario1,severidad,causa,idusuario2,descripcion) values (getdate(),suser_id(),0,'Años de servicios generales y Zona',suser_id(),'No se valoran Servicios Generales y Zona para el tipo de convocatoria '+str(@idtipoconvocatoria))
			set @resultado =1
		end*/

--acá sumo los años de servicio en la provincia que ya están multiplicado por dos más los años de servicio en otra provincia que va un punto por año
-- Se podría poner otro concepto nuevo para guardar el item servicios en otra provincia a parte
if isnull(@asGeneral,0) between 120 and 180  set @pje=0.5
else
begin
	 SET @puntajeSGenerales = @puntajeSGenerales + @ASGeneral2
	 set @pje=@puntajeSGenerales
end


--print '@puntaje '
--print @pje


	print 'años de servicios generales  ' + cast (@ASgeneral as varchar)
	print 'años de servicios generales en otra jurisdicción ' + cast (@ASgeneral2 as varchar)
	print 'años de servicios Zona1  ' + cast (@ASZona1 as varchar)
	print 'años de servicios Zona2  ' + cast (@ASZona2 as varchar)
	print 'años de servicios Zona3  ' + cast (@ASZona3 as varchar)
	print 'años de servicios Zona4  ' + cast (@ASZona4 as varchar)
	print 'años de servicios Zona5  ' + cast (@ASZona5 as varchar)
	print 'años de servicios Zona6  ' + cast (@ASZona6 as varchar)
	print 'Zona 56  ' +  cast (@PuntajeZona56 as varchar)
	print 'Zona4  ' + cast(@PuntajeZona4 as varchar)
	print 'Zona3  ' + cast(@PuntajeZona3 as varchar)
	print 'Zona2  ' + cast(@PuntajeZona2 as varchar)
	print ' puntaje '  
	print @pje
--------------------------------------------------------------------------------------------------------end -- 2   (SELECT SUM (DATEDIFF (month,sh.FechaAlta,isnull(sh.FechaBaja,@fechaCierreDeInscripciones)))
      end-- 3 @TieneZona > 0
	Else --si los servicios del agente no tienen zona los calculo con el procedimiento pje_poranosdeservicioenlaprovincia que es más rápido
	   begin 
		--print 'entré en el otro procedimiento'
		set @resultado = -9 --Cuando @resultado = -9 significa que estoy calculando años de servicio generales
		exec  pje_porAnosDeServicioEnLaProvincia @idInscripcion,@pje  output ,@resultado output
		--print'puntaje despues de la llamada'
		print @pje

		-- grabo todos los conceptos de pje por zona con 0 
--		begin transaction


			select @c1=case
				when @idTipoConvocatoria= 1 then 526
				when @idTipoConvocatoria= 2 then 302
				when @idTipoConvocatoria= 3 then 609
				when @idTipoConvocatoria= 9 then 588
				when @idTipoConvocatoria= 10 then 599
				
			end
			select @c2=case
				when @idTipoConvocatoria= 1 then 195
				when @idTipoConvocatoria= 2 then 297
				when @idTipoConvocatoria= 3 then 604
				when @idTipoConvocatoria= 9 then 549
				when @idTipoConvocatoria= 10 then 596
	
			end
			select @c3=case
				when @idTipoConvocatoria= 1 then 196
				when @idTipoConvocatoria= 2 then 298
				when @idTipoConvocatoria= 3 then 605
				when @idTipoConvocatoria= 9 then 550
				when @idTipoConvocatoria= 10 then 597
			end
			select @c4=case
				when @idTipoConvocatoria= 1 then 197
				when @idTipoConvocatoria= 2 then 299
				when @idTipoConvocatoria= 3 then 606
				when @idTipoConvocatoria= 9 then 551
				when @idTipoConvocatoria= 10 then 598
			end


		
		--	print 'c1,c2,c3,c4'
		--	print @c1
			--print @c2
			--print @c3
			--print @c4
	  if  @idTipoConvocatoria <> 11 
		begin	

			if exists(select top 1 * from tb_calificacionesdeinscripcion where inscripcion = @idInscripcion and concepto = @c1)-- grupo2 Zona Roja
				update tb_calificacionesdeinscripcion set puntaje=isnull(@PuntajeZona2,0) where inscripcion=@idInscripcion and concepto=@c1
			else 	insert tb_calificacionesdeinscripcion (Inscripcion,Concepto,Puntaje) values (@idInscripcion,@c1,isnull(@PuntajeZona2,0)) 

			if exists(select top 1 * from tb_calificacionesdeinscripcion where inscripcion = @idInscripcion and concepto = @c2)-- grupo 3 Zona Desfavorable
				update tb_calificacionesdeinscripcion set puntaje=isnull(@PuntajeZona3,0) where inscripcion=@idInscripcion and concepto=@c2
			else 	insert tb_calificacionesdeinscripcion (Inscripcion,Concepto,Puntaje) values (@idInscripcion,@c2,isnull(@PuntajeZona3,0)) 

			if exists(select top 1 * from tb_calificacionesdeinscripcion where inscripcion = @idInscripcion and concepto = @c3)-- grupo 4  Zona Muy Desfavorable
				update tb_calificacionesdeinscripcion set puntaje=isnull( @PuntajeZona4,0) where inscripcion=@idInscripcion and concepto=@c3
			else 	insert tb_calificacionesdeinscripcion (Inscripcion,Concepto,Puntaje) values (@idInscripcion,@c3,isnull( @PuntajeZona4,0)) 	

			if exists(select  top 1 * from tb_calificacionesdeinscripcion where inscripcion = @idInscripcion and concepto = @c4)-- grupo 5 y 6 Zona inhóspita
				update tb_calificacionesdeinscripcion set puntaje=isnull(@PuntajeZona56,0) where inscripcion=@idInscripcion and concepto=@c4
			else 	insert tb_calificacionesdeinscripcion (Inscripcion,Concepto,Puntaje) values (@idInscripcion,@c4,isnull(@PuntajeZona56,0)) 		
--		commit transaction

		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir
	end




	
	   end--@TieneZona > 0


     set @departamento=@departamento+1

--end-- while @departamento>=1

Salir:
IF @Error <> 0 
	ROLLBACK TRANSACTION
ELSE 
	COMMIT TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[pje_porAnosDeServicioGeneralesYenZona] TO [Juntas]
GO
